home *** CD-ROM | disk | FTP | other *** search
/ The Business Master (3rd Edition) / The Business Master (3rd Edition).iso / files / grapties / 256draw / example.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-10-23  |  3.6 KB  |  134 lines

  1. Program Example;
  2. uses crt,graph;
  3.  
  4. {
  5.   This Turbo Pascal Code example is an example of a program that simply
  6.   loads the VGA256 device driver, goes into graphics mode, loads an
  7.   image from disk (one with a palette), and displays it.
  8.  
  9.   Procedure Load256Image will load an image file and place it in the variable
  10.   pointer image.  If you are a registered user feel free to use Load256Image
  11.   in your programs.
  12.  
  13.   To run this demonstration, you will need to have Turbo Pascal Version 4.0
  14.   or later, as well as the Borland VGA256.BGI device driver.  This driver
  15.   is available as shareware, usually bundled with the BGI Toolkit.
  16.   The VGA256.BGI driver is not distributed with the 256 Draw Program.
  17. }
  18.  
  19.  
  20. Type
  21.     ColorRec = record
  22.         r,g,b: byte;
  23.     end;
  24.     PalType = array[0..255] of ColorRec;
  25.     PalFileType = file of PalType;
  26.  
  27.  
  28.  
  29. procedure Load256Image(var p:pointer; FName: string);
  30. var
  31.    VGAImageSize,ErrCode: word;
  32.    LoadFile: file;
  33.    i: integer;
  34.    r: pointer;
  35. begin
  36.     {$I-}
  37.     Assign(LoadFile,FName);
  38.     Reset(LoadFile,1);
  39.     {$I+}
  40.     if IOResult=0 then begin
  41.         GetMem(r,FileSize(LoadFile));
  42.         {$I-}
  43.         BlockRead(LoadFile,r^,FileSize(LoadFile),ErrCode);
  44.         {$I+}
  45.         VGAImageSize := ImageSize(1,1,Mem[Seg(r^):Ofs(r^)],Mem[Seg(r^):Ofs(r^)+2]);
  46.         If (VGAImageSize < FileSize(LoadFile)) then
  47.             GetMem(p,FileSize(LoadFile)-768)
  48.         else
  49.             GetMem(p,FileSize(LoadFile));
  50.         for i := 1 to (VGAImageSize) do
  51.             Mem[Seg(p^):Ofs(p^)+i-1] := Mem[Seg(r^):Ofs(r^)+i-1];
  52.         If (VGAImageSize < FileSize(LoadFile)) then begin
  53.             for i := 0 to 255 do begin
  54.                Port[$3C8] := i;
  55.                Port[$3C9] := Mem[Seg(r^):Ofs(r^)+(i*3)+VGAImageSize];
  56.                Port[$3C9] := Mem[Seg(r^):Ofs(r^)+(i*3)+VGAImageSize+1];
  57.                Port[$3C9] := Mem[Seg(r^):Ofs(r^)+(i*3)+VGAImageSize+2];
  58.             end;
  59.         end;
  60.         FreeMem(r,FileSize(LoadFile));
  61.         if IOResult <> 0 then begin
  62.             textmode(c80);
  63.             writeln('Error: ',ErrCode);
  64.             halt(1);
  65.         end;
  66.         Close(LoadFile);
  67.     end else
  68.         Halt(0);
  69. end;
  70.  
  71. procedure Load256Palette(PalName: string);
  72. Var
  73.     PalFile: PalFileType;
  74.     Pal: ^PalType;
  75.     i: integer;
  76. begin
  77.     New(Pal);
  78.     Assign(PalFile,PalName);
  79.     Reset(PalFile);
  80.     Read(PalFile,Pal^);
  81.     Close(PalFile);
  82.     for i := 0 to 255 do begin
  83.         Port[$3C8] := i;
  84.         Port[$3C9] := Pal^[i].r;
  85.         Port[$3C9] := Pal^[i].g;
  86.         Port[$3C9] := Pal^[i].b;
  87.     end;
  88.     Dispose(Pal);
  89. end;
  90.  
  91.  
  92. function DetectVGA256 : integer;
  93. { Detects VGA or MCGA video cards }
  94. var
  95.    DetectedDriver : integer;
  96.    SuggestedMode  : integer;
  97.  
  98. begin
  99.      DetectGraph(DetectedDriver, SuggestedMode);
  100.      If (DetectedDriver < 9) then begin
  101.          TextMode(c80);
  102.          TextColor(LightGray);
  103.          writeln('This program requires a VGA System.');
  104.          halt;
  105.      end;
  106.      if (DetectedDriver = VGA) or (DetectedDriver = MCGA) then
  107.          DetectVGA256 := 0        { Default video mode = 0 }
  108.      else
  109.          DetectVGA256 := grError; { Couldn't detect hardware }
  110. end; { DetectVGA256 }
  111.  
  112.  
  113.  
  114. Var
  115.    gdrive,gmode: integer;
  116.    image: pointer;
  117.    ch: char;
  118.  
  119. begin
  120.      GDrive := DetectVGA256;
  121.      GDrive := InstallUserDriver('VGA256', @DetectVGA256);
  122.      GDrive := Detect;
  123.      Gdrive := InstallUserDriver('VGA256',Nil);
  124.  
  125.      gmode:=0;
  126.      InitGraph(Gdrive,Gmode,'');
  127.      SetGraphMode(Gmode);
  128.  
  129.      Load256Image(image,'Parrot.VGA');
  130.      PutImage(0,0,image^,copyput);
  131.  
  132.      ch := readkey;
  133.      TextMode(c80);
  134. end.